<?php

/**
 * Description of RepoGrupo
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class RepoGrupo extends Repositorio {

    function __construct() {
        $this->tabla = "grupo";
        $this->id = "idGrupo";
    }

    function buscar($id) {
        $link = $this->OpenDB();
        $query = parent::buscar($id);
        $grupo = new Grupo();
        $repoPermiso = new RepoPermiso();
        $permiso = $repoPermiso->buscarPorGrupo($id);
        $grupo->setId($query[0]->idGrupo);
        $grupo->setVersion($query[0]->version);
        $grupo->setNombre($query[0]->nombre);
        $grupo->setPermiso($permiso);
        $this->CloseDB($link);
        return $grupo;
    }

    function buscarPorUsuario($idUusario) {
        $gruposObj = $this->GetSQL("SELECT usuario_grupo.grupo as idGrupo, grupo.nombre as nombre 
                              FROM usuario_grupo 
                              JOIN grupo ON
                              grupo.idGrupo = usuario_grupo.grupo 
                              WHERE usuario_grupo.usuario = " . $idUusario);
        if (is_array($gruposObj)) {
            foreach ($gruposObj as $grupoObj) {
                $grupo = new Grupo();
                $grupo->setId($grupoObj->idGrupo);
                $grupo->setNombre($grupoObj->nombre);
                $grupos[] = $grupo;
            }
            return $grupos;
        }
        return false;
    }

    function agregar(Grupo $grupo) {
        try {
            $link = $this->OpenDB();
            $this->beginTransaction();
            $query = "INSERT INTO " . $this->tabla . "(nombre, usuario, deshabilitado) values (";
            $query .= "'" . $grupo->getNombre() . "', ";
            $query .= "'" . $grupo->getUsuario() . "', ";
            $query .= $grupo->getDeshabilitado() . ")";
            $result = $this->PostSQL($query);
            if ($result) {
                /* @var $permiso Permiso */
                $permiso = $grupo->getPermiso();

                $idGrupo = $this->GetInsertedId();
                if (is_numeric($idGrupo)) {
                    $query = "INSERT INTO permiso (grupo, 
            altaTerapeutas, bajaTerapeutas, modTerapeutas, 
            altaTratamientos, bajaTratamientos, modTratamientos, 
            altaGabinetes, bajaGabinetes, modGabinetes, 
            altaUsuarios, bajaUsuarios, modUsuarios, 
            altaGrupos, bajaGrupos, modGrupos, 
            altaReservas, bajaReservas, modReservas, 
            adminHorariosTerapeutas, 
            adminComprobantes,altaProductos,bajaProductos,
            modProductos,altaBloqueosGabinete,bajaBloqueosGabinete,
            modBloqueosGabinete,altaPermisosTemporales,bajaPermisosTemporales
            ,modPermisosTemporales,altaDescuentos,bajaDescuentos,modDescuentos,adminReportes
            ,adminClientesHotel,altaClientesEventuales,bajaClientesEventuales,modClientesEventuales) ";

                    $query .= "values (" . $idGrupo;
                    $query .= "," . $permiso->getAltaTerapeutas();
                    $query .= "," . $permiso->getBajaTerapeutas();
                    $query .= "," . $permiso->getModTerapeutas();
                    $query .= "," . $permiso->getAltaTratamientos();
                    $query .= "," . $permiso->getBajaTratamientos();
                    $query .= "," . $permiso->getModTratamientos();
                    $query .= "," . $permiso->getAltaGabinetes();
                    $query .= "," . $permiso->getBajaGabinetes();
                    $query .= "," . $permiso->getModGabinetes();
                    $query .= "," . $permiso->getAltaUsuarios();
                    $query .= "," . $permiso->getBajaUsuarios();
                    $query .= "," . $permiso->getModUsuarios();
                    $query .= "," . $permiso->getAltaGrupos();
                    $query .= "," . $permiso->getBajaGrupos();
                    $query .= "," . $permiso->getModGrupos();
                    $query .= "," . $permiso->getAltaReservas();
                    $query .= "," . $permiso->getBajaReservas();
                    $query .= "," . $permiso->getModReservas();
                    $query .= "," . $permiso->getAdminHorariosTerapeutas();
                    $query .= "," . $permiso->getAdminComprobantes();
                    $query .= "," . $permiso->getAltaProductos();
                    $query .= "," . $permiso->getBajaProductos();
                    $query .= "," . $permiso->getModProductos();
                    $query .= "," . $permiso->getAltaBloqueosGabinete();
                    $query .= "," . $permiso->getBajaBloqueosGabinete();
                    $query .= "," . $permiso->getModBloqueosGabinete();
                    $query .= "," . $permiso->getAltaPermisosTemporales();
                    $query .= "," . $permiso->getBajaPermisosTemporales();
                    $query .= "," . $permiso->getModPermisosTemporales();
                    $query .= "," . $permiso->getAltaDescuentos();
                    $query .= "," . $permiso->getBajaDescuentos();
                    $query .= "," . $permiso->getModDescuentos();
                    $query .= "," . $permiso->getAdminReportes();
                    $query .= "," . $permiso->getAdminClientesHotel();
                    $query .= "," . $permiso->getAltaClientesEventuales();
                    $query .= "," . $permiso->getBajaClientesEventuales();
                    $query .= "," . $permiso->getModClientesEventuales();
                    $query .= ");";
                    $result = $this->PostSQL($query);
                }
            }
            if ($result) {
                $this->commitTransaction();
            } else {
                $this->rollbackTransaction();
            }
            $this->CloseDB($link);
        } catch (Exception $ex) {
            return $ex;
        }
        return $result;
    }

    function modificar(Grupo $grupo) {
        try {
            $link = $this->OpenDB();
            $this->beginTransaction();
            $query = "UPDATE " . $this->tabla . " SET ";
            $query .= "nombre = '" . $grupo->getNombre() . "', ";
            $query .= "usuario = '" . $grupo->getUsuario() . "', ";
            $query .= "deshabilitado = " . $grupo->getDeshabilitado();
            $query .= " WHERE " . $this->id . " = " . $grupo->getId();
            $result = $this->PostSQL($query);
            $permiso = new Permiso();
            $permiso = $grupo->getPermiso();
            if ($result) {
                $query = "UPDATE permiso SET ";
                $query .= "altaTerapeutas = " . $permiso->getAltaTerapeutas();
                $query .= ",bajaTerapeutas = " . $permiso->getBajaTerapeutas();
                $query .= ",modTerapeutas = " . $permiso->getModTerapeutas();
                $query .= ",altaTratamientos = " . $permiso->getAltaTratamientos();
                $query .= ",bajaTratamientos = " . $permiso->getBajaTratamientos();
                $query .= ",modTratamientos = " . $permiso->getModTratamientos();
                $query .= ",altaGabinetes = " . $permiso->getAltaGabinetes();
                $query .= ",bajaGabinetes = " . $permiso->getBajaGabinetes();
                $query .= ",modGabinetes = " . $permiso->getModGabinetes();
                $query .= ",altaUsuarios = " . $permiso->getAltaUsuarios();
                $query .= ",bajaUsuarios = " . $permiso->getBajaUsuarios();
                $query .= ",modUsuarios = " . $permiso->getModUsuarios();
                $query .= ",altaGrupos = " . $permiso->getAltaGrupos();
                $query .= ",bajaGrupos = " . $permiso->getBajaGrupos();
                $query .= ",modGrupos = " . $permiso->getModGrupos();
                $query .= ",altaReservas = " . $permiso->getAltaReservas();
                $query .= ",bajaReservas = " . $permiso->getBajaReservas();
                $query .= ",modReservas = " . $permiso->getModReservas();
                $query .= ",adminHorariosTerapeutas = " . $permiso->getAdminHorariosTerapeutas();
                $query .= ",adminComprobantes = " . $permiso->getAdminComprobantes();
                $query .= ",altaProductos = " . $permiso->getAltaProductos();
                $query .= ",bajaProductos = " . $permiso->getBajaProductos();
                $query .= ",modProductos = " . $permiso->getModProductos();
                $query .= ",altaBloqueosGabinete = " . $permiso->getAltaBloqueosGabinete();
                $query .= ",bajaBloqueosGabinete = " . $permiso->getBajaBloqueosGabinete();
                $query .= ",modBloqueosGabinete = " . $permiso->getModBloqueosGabinete();
                $query .= ",altaPermisosTemporales = " . $permiso->getAltaPermisosTemporales();
                $query .= ",bajaPermisosTemporales = " . $permiso->getBajaPermisosTemporales();
                $query .= ",modPermisosTemporales = " . $permiso->getModPermisosTemporales();
                $query .= ",altaDescuentos = " . $permiso->getAltaDescuentos();
                $query .= ",bajaDescuentos = " . $permiso->getBajaDescuentos();
                $query .= ",modDescuentos = " . $permiso->getModDescuentos();
                $query .= ",adminReportes = " . $permiso->getAdminReportes();
                $query .= ",adminClientesHotel = " . $permiso->getAdminClientesHotel();
                $query .= ",altaClientesEventuales = " . $permiso->getAltaClientesEventuales();
                $query .= ",bajaClientesEventuales = " . $permiso->getBajaClientesEventuales();
                $query .= ",modClientesEventuales = " . $permiso->getModClientesEventuales();
                $query .= " WHERE grupo = " . $grupo->getId();
                $result = $this->PostSQL($query);
            }
            if ($result) {
                $this->commitTransaction();
            } else {
                $this->rollbackTransaction();
            }

            $this->CloseDB($link);
        } catch (Exception $ex) {
            return $ex;
        }
        return $result;
    }

    function listar() {
        $gruposObj = parent::listar();
        $grupos = "";
        foreach ($gruposObj as $grupoObj) {
            $grupo = new Grupo();
            $grupo->setNombre($grupoObj->nombre);
            $grupo->setId($grupoObj->idGrupo);
            $grupos[] = $grupo;
        }
        return $grupos;
    }

    function listarHabilitados() {
        $gruposObj = parent::listarHabilitados();
        $grupos = "";
        foreach ($gruposObj as $grupoObj) {
            $grupo = new Grupo();
            $grupo->setNombre($grupoObj->nombre);
            $grupo->setId($grupoObj->idGrupo);
            $grupos[] = $grupo;
        }
        return $grupos;
    }

    function eliminarGrupo($id) {
        $link = $this->OpenDB();
        $query = "delete from permiso where grupo = " . $id;
        $result = $this->PostSQL($query);
        $query = "delete from " . $this->tabla . " where " . $this->id . " = " . $id;
        $result = $this->PostSQL($query);
        $this->CloseDB($link);
        
        return $result;
    }

}

?>
